// typeof 类型判断
class Man {}
let man = new Man()
console.log(typeof Man, typeof man)  // function, object
console.log(typeof new Set())  // object
console.log(typeof new Map())  // object
function addFn(num: number | string) {
  // num += 10 // 报错，num还没有确定具体类型，联合类型是不能进行运算的
  if (typeof num === 'number') {
    num += 10  // 不报错，因为 typeof类型守卫 将num推断为number了
  }
}

// instanceof 实例判断
class WechatPay { money: number = 10; }
class Alipay { balance: number = 20 }
class Obj {
  pay(payType: WechatPay | Alipay) {
    if (payType instanceof WechatPay) {
      console.log('您使用了微信支付金额：', payType.money)
    } else if (payType instanceof Alipay) {
      console.log('您使用了支付宝支付余额：', payType.balance)
    }
  }
}
let alipay = new Alipay()
let obj = new Obj()
obj.pay(alipay)

// in 属性与方法判断
class Car { money: number = 1000; carName: string = '保时捷' }
class Bus { money: number = 5000; busName: string = '大巴车' }
class Vechile {
  showInfo(vechile: Car | Bus) {
    if ('money' in vechile) {
      vechile.money  // 2种以上的类型通过类型守卫时，只是使用它们共同的属性
    }
    if ('busName' in vechile) {
      vechile.busName  // 当只有1中类型通过时，则可以只用那个类型的所有属性
    }
  }
}

export {}